<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>geohash_grid 聚合 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'search-aggregations-bucket-geohashgrid-aggregation.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-geohashgrid-aggregation.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-geohashgrid-aggregation.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/search-aggregations-bucket-geohashgrid-aggregation.html" rel="nofollow" target="_blank">../en/search-aggregations-bucket-geohashgrid-aggregation.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="search-aggregations.html">聚合</a></span>
»
<span class="breadcrumb-link"><a href="search-aggregations-bucket.html">桶(bucket)聚合</a></span>
»
<span class="breadcrumb-node">geohash_grid 聚合</span>
</div>
<div class="navheader">
<span class="prev">
<a href="search-aggregations-bucket-geodistance-aggregation.html">« geo_distance 聚合</a>
</span>
<span class="next">
<a href="search-aggregations-bucket-geotilegrid-aggregation.html">geotile_grid 聚合
 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="search-aggregations-bucket-geohashgrid-aggregation"></a>geohash网格(geohash_grid)聚合
</h2>
</div></div></div>
<p>
一个多桶聚合，作用于 <code class="literal">geo_point</code> 字段，并将坐标点分组到代表网格单元格的桶中。

生成的网格可以是稀疏的，只包含具有匹配数据的单元格。

每个单元格都使用用户可定义精度的<a href="http://en.wikipedia.org/wiki/Geohash" class="ulink" target="_top" rel="nofollow">geohash</a>进行标注。
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
高精度 geohash 的字符串长度比较长，表示仅覆盖很小区域的单元格。
</li>
<li class="listitem">
低精度 geohash 的字符串长度比较短，表示每个覆盖较大区域的单元格。
</li>
</ul>
</div>
<p>此聚合中使用的 geohash 的精度可在1和12之间选择。</p>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>
长度为12的最高精度的 geohash 生成的单元格覆盖的土地面积不到一平方米，因此高精度请求在内存和结果大小方面的成本非常高。

请看下面的示例，了解如何在请求高精度的详细信息之前，先将聚合过滤到较小的地理区域。
</p>
</div>
</div>
<p>指定字段的类型必须是<code class="literal">geo_point</code> (只能在映射中显式设置)，它还可以保存一个<code class="literal">geo_point</code>字段数组，在这种情况下，所有这些都将在聚合过程中考虑在内。</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_simple_low_precision_request"></a>简单的低精度的请求
</h3>
</div></div></div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT /museums
{
    "mappings": {
          "properties": {
              "location": {
                  "type": "geo_point"
              }
          }
    }
}

POST /museums/_bulk?refresh
{"index":{"_id":1}}
{"location": "52.374081,4.912350", "name": "NEMO Science Museum"}
{"index":{"_id":2}}
{"location": "52.369219,4.901618", "name": "Museum Het Rembrandthuis"}
{"index":{"_id":3}}
{"location": "52.371667,4.914722", "name": "Nederlands Scheepvaartmuseum"}
{"index":{"_id":4}}
{"location": "51.222900,4.405200", "name": "Letterenhuis"}
{"index":{"_id":5}}
{"location": "48.861111,2.336389", "name": "Musée du Louvre"}
{"index":{"_id":6}}
{"location": "48.860000,2.327000", "name": "Musée d'Orsay"}

POST /museums/_search?size=0
{
    "aggregations" : {
        "large-grid" : {
            "geohash_grid" : {
                "field" : "location",
                "precision" : 3
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/468.console"></div>
<p>响应：</p>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
    ...
    "aggregations": {
        "large-grid": {
            "buckets": [
                {
                    "key": "u17",
                    "doc_count": 3
                },
                {
                    "key": "u09",
                    "doc_count": 2
                },
                {
                    "key": "u15",
                    "doc_count": 1
                }
            ]
        }
    }
}</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_high_precision_requests"></a>高精度的请求
</h3>
</div></div></div>
<p>当请求详细的桶(通常用于显示“放大”的地图)时，应应用类似<a class="xref" href="query-dsl-geo-bounding-box-query.html" title="geo-bounding box 查询" rel="nofollow">geo_bounding_box</a>的过滤器来缩小主题区域，否则可能会创建并返回数百万个桶。</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /museums/_search?size=0
{
    "aggregations" : {
        "zoomed-in" : {
            "filter" : {
                "geo_bounding_box" : {
                    "location" : {
                        "top_left" : "52.4, 4.9",
                        "bottom_right" : "52.3, 5.0"
                    }
                }
            },
            "aggregations":{
                "zoom1":{
                    "geohash_grid" : {
                        "field": "location",
                        "precision": 8
                    }
                }
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/469.console"></div>
<p>
<code class="literal">geohash_grid</code> 聚合返回的 geohash 也可用于放大。

要放大上例中返回的第一个geohash <code class="literal">u17</code>，应将它指定为<code class="literal">top_left</code> 和 <code class="literal">bottom_right</code>：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /museums/_search?size=0
{
    "aggregations" : {
        "zoomed-in" : {
            "filter" : {
                "geo_bounding_box" : {
                    "location" : {
                        "top_left" : "u17",
                        "bottom_right" : "u17"
                    }
                }
            },
            "aggregations":{
                "zoom1":{
                    "geohash_grid" : {
                        "field": "location",
                        "precision": 8
                    }
                }
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/470.console"></div>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
    ...
    "aggregations" : {
        "zoomed-in" : {
            "doc_count" : 3,
            "zoom1" : {
                "buckets" : [
                    {
                        "key" : "u173zy3j",
                        "doc_count" : 1
                    },
                    {
                        "key" : "u173zvfz",
                        "doc_count" : 1
                    },
                    {
                        "key" : "u173zt90",
                        "doc_count" : 1
                    }
                ]
            }
        }
    }
}</pre>
</div>
<p>
对于不支持 geohash 的系统上的“放大”操作，应该使用一个可用的 geohash 库将桶的键转换为边界框。

例如，对于 javascript，可以使用<a href="https://github.com/sunng87/node-geohash" class="ulink" target="_top" rel="nofollow">node-geohash</a>库：
</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">var geohash = require('ngeohash');

// bbox will contain [ 52.03125, 4.21875, 53.4375, 5.625 ]
//                   [   minlat,  minlon,  maxlat, maxlon]
var bbox = geohash.decode_bbox('u17');</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_requests_with_additional_bounding_box_filtering"></a>带有附加边界框过滤的请求
</h3>
</div></div></div>
<p>
<code class="literal">geohash_grid</code> 聚合支持一个可选的参数-<code class="literal">bounds</code>，该参数将所考虑的坐标点限制在所提供的边界内。

参数 <code class="literal">bounds</code> 接受 地理边界框(geo_bounding_box)查询中的所有<a class="xref" href="query-dsl-geo-bounding-box-query.html#query-dsl-geo-bounding-box-query-accepted-formats" title="有效的格式" rel="nofollow">有效的格式</a>的边界的边界框。

此边界框可与在聚合前过滤坐标点的附加<code class="literal">geo_bounding_box</code>查询一起使用，也可单独使用。

它是一个独立的边界框，可以与聚合上下文中定义的任何其他<code class="literal">geo_bounding_box</code>查询相交、相等或不相交。
</p>
<a id="geohashgrid-aggregation-with-bounds"></a><div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /museums/_search?size=0
{
    "aggregations" : {
        "tiles-in-bounds" : {
            "geohash_grid" : {
                "field" : "location",
                "precision" : 8,
                "bounds": {
                  "top_left" : "53.4375, 4.21875",
                  "bottom_right" : "52.03125, 5.625"
                }
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/471.console"></div>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
    ...
    "aggregations" : {
        "tiles-in-bounds" : {
           "buckets" : [
               {
                 "key" : "u173zy3j",
                 "doc_count" : 1
               },
               {
                 "key" : "u173zvfz",
                 "doc_count" : 1
               },
               {
                 "key" : "u173zt90",
                 "doc_count" : 1
               }
           ]
        }
    }
}</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_cell_dimensions_at_the_equator"></a>赤道上的单元格的空间大小
</h3>
</div></div></div>
<p>
下表显示了 geohash 的各种字符串长度所覆盖的单元格的空间纬度的大小。

单元格的尺寸随纬度变化，因此该表适用于赤道上的最坏情况。
</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<span class="strong strong"><strong>geohash值长度</strong></span>
</p>
</td>
<td valign="top">
<p>
<span class="strong strong"><strong>区域(宽 x 高)</strong></span>
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
1
</p>
</td>
<td valign="top">
<p>
5,009.4km x 4,992.6km
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
2
</p>
</td>
<td valign="top">
<p>
1,252.3km x 624.1km
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
3
</p>
</td>
<td valign="top">
<p>
156.5km x 156km
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
4
</p>
</td>
<td valign="top">
<p>
39.1km x 19.5km
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
5
</p>
</td>
<td valign="top">
<p>
4.9km x 4.9km
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
6
</p>
</td>
<td valign="top">
<p>
1.2km x 609.4m
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
7
</p>
</td>
<td valign="top">
<p>
152.9m x 152.4m
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
8
</p>
</td>
<td valign="top">
<p>
38.2m x 19m
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
9
</p>
</td>
<td valign="top">
<p>
4.8m x 4.8m
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
10
</p>
</td>
<td valign="top">
<p>
1.2m x 59.5cm
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
11
</p>
</td>
<td valign="top">
<p>
14.9cm x 14.9cm
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
12
</p>
</td>
<td valign="top">
<p>
3.7cm x 1.9cm
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_options_3"></a>选项
</h3>
</div></div></div>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
field
</p>
</td>
<td valign="top">
<p>
必要的。使用 GeoPoints 索引的字段的名称。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
precision
</p>
</td>
<td valign="top">
<p>
可选。用于在结果中定义单元格/桶的 geohash 的字符串长度。默认值为 5。

精度可以用上面提到的整数精度等级来定义。

超出[1,12]范围的值将被拒绝。

或者，可以从“1km”、“10m”这样的距离度量来近似计算精度等级。

计算精度的等级，使得单元格不会超过所需精度的指定大小(对角线)。

当这会导致精度等级高于支持的12级时(例如距离小于5.6厘米)，该值将被拒绝。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
bounds
</p>
</td>
<td valign="top">
<p>
可选。用于过滤桶中的坐标点的边界框。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
size
</p>
</td>
<td valign="top">
<p>
可选。要返回的 geohash 桶的最大数量(默认为10,000)。

当结果被裁剪(trim)时，基于桶包含的文档数量来区分桶的优先级。
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
shard_size
</p>
</td>
<td valign="top">
<p>
可选。为了对最终结果中返回的前几个单元格进行更精确的计数，该聚合默认从每个分片返回 <code class="literal">max(10,(size x number-of-shards))</code> 个桶。

如果不希望采用这种启发式方法，则可以使用此参数覆盖每个分片所考虑的数字。 
</p>
</td>
</tr>
</tbody>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="search-aggregations-bucket-geodistance-aggregation.html">« geo_distance 聚合</a>
</span>
<span class="next">
<a href="search-aggregations-bucket-geotilegrid-aggregation.html">geotile_grid 聚合 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>